package com.dingqb.ktdemo
/**
 open
 abstract
 final
 annotation
 enum
 **/
open class Base{
	open fun f() {
		println("Base")
	}

}

abstract class Child : Base() {
	override fun f() {
		println("Child :Base")
	}
}

class Oop : Child() {

	override fun f() {
		println("Oop")
	}
}

class Oop2 : Child() {// 内部类的使用
	var obj:String ="--成员变量obj";
	override fun f() {
		println("Oop2")
	}

	/** 嵌套类**/
	class Oop22_ {
		fun ff22() {
			println("Oop22-ff22,内部类 方法"+Oop2().obj)
		}
	}

	/** 嵌套内部类**/
	inner class Oop22 {
		fun ff22() {
			var o = this@Oop2 //获取外部类的成员变量
			o.f();
			println("Oop22-ff22,嵌套内部类 方法")
		}

	}
}

fun main() {
	var oop: Base = Oop();
	oop.f();
	var oop2: Base = Oop2();
	oop2.f();

	var oop22: Oop2.Oop22 = Oop2().Oop22();// 	嵌套内部类:类名().类ming()
	oop22.ff22();
	var oop22_ = Oop2.Oop22_();// 内部类是有: 类名.类名()
	oop22_.ff22();

}
